package language_basic

import (
	"encoding/json"
	"fmt"
)

/**
json.Marshal(v interface{}) ([]byte, error) : 将数据结构解码成json数据
json.Unmarshal(data []byte, v interface{})err ：将json字符串解码到相应的数据结构
*/
func Json() {

	//代表最里层的结构体
	type appInfo struct {
		Appid string `json:"appId"`
	}
	//代表第二层的结构体
	type response struct {
		RespCode string  `json:"respCode"`
		RespMsg  string  `json:"respMsg"`
		AppInfo  appInfo `json:"app"`
	}
	//代表最外层花括号的结构体
	type JsonResult struct {
		Resp response `json:"resp"`
	}

	jsonstr := `{"resp": {"respCode": "000000","respMsg": "成功","app": {"appId": "xxxxxx"}}}`
	str := []byte(jsonstr) //string转[]byte
	var JsonRes JsonResult
	err := json.Unmarshal(str, &JsonRes) //接收体必须传递指针
	if err != nil {
		fmt.Println(err) //解析失败会报错，如json字符串格式不对，缺"号，缺}等
	}
	fmt.Println("after parse", JsonRes)

	jsonMar, err := json.Marshal(JsonRes)
	if err != nil {
		fmt.Println(err) //解析失败会报错，如json字符串格式不对，缺"号，缺}等
	}
	fmt.Println(string(jsonMar)) //[]byte转string
}
